<?php

class ValidadorDeFormularioDeEscolaridade extends Model{
	
	/*******************
	 * ATRIBUTOS 
	 *******************/
	
	private $mensagemStatus;
	private $formularioValido;
	public $camposDoFormulario;
	public $errors;
	private $opcoesDePosGraduacaoSelecionada;
	
	/*******************
	 * CONSTRUTOR 
	 *******************/
	
	public function __construct() {
		// load database library into $this->db (can be omitted if not required)
		//parent::__construct();
		$this->mensagemStatus = "";
		$this->formularioValido = false;
		$this->errors = array();
		$this->camposDoFormulario = null;
		$this->opcoesDePosGraduacaoSelecionada = "";
	}
	
	/*******************
	 * METODOS 
	 *******************/	

	//Verifica se há erros em qualquer um dos campos do formulário, caso houver devolve o array de erros
	public function verificarCamposValidos(){
		
		$this->camposDoFormulario = Validate::factory($_POST);
		
		if((isset($_POST['escolaridadeEnsinoFundamental'])) or (isset($_POST['escolaridadeEnsinoMedio'])) or (isset($_POST['escolaridadeEnsinoSuperior'])) or (isset($_POST['escolaridadePosGraduacao']))){
			// verificando checkbox do ensino fundamental
			if(isset($_POST['escolaridadeEnsinoFundamental'])){	
				$this->camposDoFormulario->rule('grauDeEnsinoFundamental', 'not_empty');
				if(isset($_POST['grauDeEnsinoFundamental']) and ($_POST['grauDeEnsinoFundamental'] == "Completo")){
					$this->camposDoFormulario->rule('anoDeConclusaoEnsinoFundamental', 'not_empty');
				}
			}
	
			// verificando checkbox do ensino medio
			if(isset($_POST['escolaridadeEnsinoMedio'])){	
				$this->camposDoFormulario->rule('tipoDeEnsinoMedio', 'not_empty');
				
				if(isset($_POST['tipoDeEnsinoMedio'])){
					if($_POST['tipoDeEnsinoMedio'] == "Normal"){
						$this->camposDoFormulario->rule('grauDeEnsinoMedioNormal', 'not_empty');
						if(isset($_POST['grauDeEnsinoMedioNormal']) && ($_POST['grauDeEnsinoMedioNormal'] == "Completo")){
							$this->camposDoFormulario->rule('anoDeConclusaoEnsinoMedioNormal', 'not_empty');
						}
						
					}
					else{
						$this->camposDoFormulario->rule('grauDeEnsinoMedioProfissionalizante', 'not_empty');
						if(isset($_POST['grauDeEnsinoMedioProfissionalizante']) && ($_POST['grauDeEnsinoMedioProfissionalizante'] == "Completo")){
							$this->camposDoFormulario->rule('anoDeConclusaoEnsinoMedioProfissionalizante', 'not_empty');
						}
					}
				}
			}
	
			// verificando checkbox do ensino superior
			if(isset($_POST['escolaridadeEnsinoSuperior'])){	
				$this->camposDoFormulario->rule('cursoDeEnsinoSuperior', 'not_empty');
				$this->camposDoFormulario->rule('instituicaoEnsinoSuperior', 'not_empty');
				$this->camposDoFormulario->rule('grauDeEnsinoSuperior', 'not_empty');
				if(isset($_POST['grauDeEnsinoSuperior']) and ($_POST['grauDeEnsinoSuperior'] == "Completo")){
					$this->camposDoFormulario->rule('anoDeConclusaoEnsinoSuperior', 'not_empty');
				}
			}
	
			// verificando checkbox do pos graduação
			if(isset($_POST['escolaridadePosGraduacao'])){

				if((isset($_POST['nivelDePosGraduacaoEspecializacao'])) || (isset($_POST['nivelDePosGraduacaoMestrado'])) || (isset($_POST['nivelDePosGraduacaoDoutorado']))){
					
					// verificando especialização
					if(isset($_POST['nivelDePosGraduacaoEspecializacao'])){	
						$this->camposDoFormulario->rule('cursoDeEspecializacao', 'not_empty');
						$this->camposDoFormulario->rule('instituicaoDeEspecializacao', 'not_empty');
						$this->camposDoFormulario->rule('grauDePosGraduacaoEspecializacao', 'not_empty');
						if(isset($_POST['grauDePosGraduacaoEspecializacao']) and ($_POST['grauDePosGraduacaoEspecializacao'] == "Completo")){
							$this->camposDoFormulario->rule('anoDeConclusaoEspecializacao', 'not_empty');
						}
					}
				
					// verificando mestrado
					if(isset($_POST['nivelDePosGraduacaoMestrado'])){	
						$this->camposDoFormulario->rule('cursoDeMestrado', 'not_empty');
						$this->camposDoFormulario->rule('instituicaoDeMestrado', 'not_empty');
						$this->camposDoFormulario->rule('grauDePosGraduacaoMestrado', 'not_empty');
						if(isset($_POST['grauDePosGraduacaoMestrado']) and ($_POST['grauDePosGraduacaoMestrado'] == "Completo")){
							$this->camposDoFormulario->rule('anoDeConclusaoMestrado', 'not_empty');
						}
					}
				
					// verificando doutorado
					if(isset($_POST['nivelDePosGraduacaoDoutorado'])){	
						$this->camposDoFormulario->rule('cursoDeDoutorado', 'not_empty');
						$this->camposDoFormulario->rule('instituicaoDeDoutorado', 'not_empty');
						$this->camposDoFormulario->rule('grauDePosGraduacaoDoutorado', 'not_empty');
						if(isset($_POST['grauDePosGraduacaoDoutorado']) and ($_POST['grauDePosGraduacaoDoutorado'] == "Completo")){
							$this->camposDoFormulario->rule('anoDeConclusaoDoutorado', 'not_empty');
						}
					}
				}
				else{
					$this->camposDoFormulario->rule('nivelDePosGraduacaoEspecializacao', 'not_empty');
					$this->camposDoFormulario->rule('nivelDePosGraduacaoMestrado', 'not_empty');
					$this->camposDoFormulario->rule('nivelDePosGraduacaoDoutorado', 'not_empty');
				}
			}			
		}
		else{
			$this->setFormularioValido(false);
		}
		if ($this->camposDoFormulario->check()){
				$this->setFormularioValido(true);
		}
		
		if (!$this->isFormularioValido()){
			$this->camposDoFormulario->check();
			$this->setFormularioValido(false);			
			$this->setErros($this->camposDoFormulario->errors('camposDoFormularioDeFormularioDeEscolaridade'));
			$this->redefinirMensagensDeErro();
		}
	}
	
	private function redefinirMensagensDeErro(){
		//verifica se algum ensino foi selecionado para definir mensagem de erro
		if((!isset($_POST['escolaridadeEnsinoFundamental'])) and (!isset($_POST['escolaridadeEnsinoMedio'])) and (!isset($_POST['escolaridadeEnsinoSuperior'])) and (!isset($_POST['escolaridadePosGraduacao']))){
			$this->errors['nenhumEnsinoSelecionado'] = "Selecione pelo menos um dos ensinos";
		}
		
		//REDEFININDO AS MENSAGENS DE ERRO
		if(isset($this->errors['nivelDePosGraduacaoEspecializacao']) && isset($this->errors['nivelDePosGraduacaoMestrado']) && isset($this->errors['nivelDePosGraduacaoDoutorado'])){
			$this->errors['nivelDePosGraduacaoEspecializacao'] = "Selecione pelo menos um dos ensinos da pos-graduação";
			$this->errors['nivelDePosGraduacaoMestrado'] = "Selecione pelo menos um dos ensinos da pos-graduação";
			$this->errors['nivelDePosGraduacaoDoutorado'] = "Selecione pelo menos um dos ensinos da pos-graduação";
		}
		
		if (isset($this->errors['grauDeEnsinoFundamental'])){
			$this->errors['grauDeEnsinoFundamental'] = "Defina o grau de ensino";
		}
		if (isset($this->errors['anoDeConclusaoEnsinoFundamental'])){
			$this->errors['anoDeConclusaoEnsinoFundamental'] = "Informe o ano que concluiu o ensino";
		}
		if (isset($this->errors['tipoDeEnsinoMedio'])){
			$this->errors['tipoDeEnsinoMedio'] = "Informe qual tipo de ensino médio";
		}
		if (isset($this->errors['grauDeEnsinoMedioNormal'])){
			$this->errors['grauDeEnsinoMedioNormal'] = "Defina o grau de ensino";
		}
		if (isset($this->errors['anoDeConclusaoEnsinoMedioNormal'])){
			$this->errors['anoDeConclusaoEnsinoMedioNormal'] = "Informe o ano que concluiu o ensino";
		}
		if (isset($this->errors['grauDeEnsinoMedioProfissionalizante'])){
			$this->errors['grauDeEnsinoMedioProfissionalizante'] = "Defina o grau de ensino";
		}
		if (isset($this->errors['anoDeConclusaoEnsinoMedioProfissionalizante'])){
			$this->errors['anoDeConclusaoEnsinoMedioProfissionalizante'] = "Informe o ano que concluiu o ensino";
		}
		if (isset($this->errors['cursoDeEnsinoSuperior'])){
			$this->errors['cursoDeEnsinoSuperior'] = "Informe o curso";
		}
		if (isset($this->errors['instituicaoEnsinoSuperior'])){
			$this->errors['instituicaoEnsinoSuperior'] = "Informe o nome da instituição";
		}
		if (isset($this->errors['grauDeEnsinoSuperior'])){
			$this->errors['grauDeEnsinoSuperior'] = "Defina o grau de ensino";
		}
		if (isset($this->errors['anoDeConclusaoEnsinoSuperior'])){
			$this->errors['anoDeConclusaoEnsinoSuperior'] = "Informe o ano que concluiu o ensino";
		}
		if (isset($this->errors['cursoDeEspecializacao'])){
			$this->errors['cursoDeEspecializacao'] = "Informe o curso";
		}
		if (isset($this->errors['instituicaoDeEspecializacao'])){
			$this->errors['instituicaoDeEspecializacao'] = "Informe o nome da instituição";
		}
		if (isset($this->errors['grauDePosGraduacaoEspecializacao'])){
			$this->errors['grauDePosGraduacaoEspecializacao'] = "Defina o grau de ensino";
		}
		if (isset($this->errors['anoDeConclusaoEspecializacao'])){
			$this->errors['anoDeConclusaoEspecializacao'] = "Informe o ano que concluiu o ensino";
		}
		if (isset($this->errors['cursoDeMestrado'])){
			$this->errors['cursoDeMestrado'] = "Informe o curso";
		}
		if (isset($this->errors['instituicaoDeMestrado'])){
			$this->errors['instituicaoDeMestrado'] = "Informe o nome da instituição";
		}
		if (isset($this->errors['grauDePosGraduacaoMestrado'])){
			$this->errors['grauDePosGraduacaoMestrado'] = "Defina o grau de ensino";
		}
		if (isset($this->errors['anoDeConclusaoMestrado'])){
			$this->errors['anoDeConclusaoMestrado'] = "Informe o ano que concluiu o ensino";
		}
		if (isset($this->errors['cursoDeDoutorado'])){
			$this->errors['cursoDeDoutorado'] = "Informe o curso";
		}
		if (isset($this->errors['instituicaoDeDoutorado'])){
			$this->errors['instituicaoDeDoutorado'] = "Informe o nome da instituição";
		}
		if (isset($this->errors['grauDePosGraduacaoDoutorado'])){
			$this->errors['grauDePosGraduacaoDoutorado'] = "Defina o grau de ensino";
		}
		if (isset($this->errors['anoDeConclusaoDoutorado'])){
			$this->errors['anoDeConclusaoDoutorado'] = "Informe o ano que concluiu o ensino";
		}
	}



	// This might go in base Model class
	public function getFormValues() {
		return arr::overwrite($this->fields, $this->$camposDoFormulario->as_array());
	}

	// This might go in base Model class
	public function getValidationErrors() {
		return arr::overwrite($this->fields, $this->$camposDoFormulario->errors('form_errors'));
	}

	
	/*******************
	 * GETTERS/SETTERS 
	 *******************/
	
	public function isFormularioValido() {
		return $this->formularioValido;
	}
	
	public function setFormularioValido($formularioValido){
		$this->formularioValido = $formularioValido;
	}
	
	public function getErros() {
		return $this->errors;
	}
	
	public function setErros($errors){
		$this->errors = $errors;
	}
	
	public function getCamposDoFormulario() {
		return $_POST;
	}
	
	public function setCamposDoFormulario($camposDoFormulario){
		$this->camposDoFormulario = $camposDoFormulario;
	}
}
?>